package donkeykong;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Pauline extends JPanel implements Runnable {

	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private int posicion_x_Pauline;
	
	private int posicion_y_Pauline;
	
	private Image Pauline_socorro,Pauline_amor,Pauline_desamor,imagen_Pauline;

	private boolean rescatada;

	private DonkeyKong donkey;

	/** Variable usada para eliminar el Thread de Pauline **/
	private boolean morir;
	
	
	public Pauline ( int posx, int posy ){
		try{
			setPosicionX(posx);
			setPosicionY(posy);
			Pauline_socorro = ImageIO.read(new File("./images/pauline/pauline_SOS.png"));
			Pauline_amor = ImageIO.read(new File("./images/pauline/pauline_amor.png"));
			Pauline_desamor = ImageIO.read(new File("./images/pauline/pauline_desamor.png"));
			imagen_Pauline = Pauline_socorro;
			rescatada=false;
			morir=false;
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	
	/** Funcion paintComponent que es propia de los JPanels, que sirve para dibujar en el mismo la imagen que se quiera, entre otras opciones **/
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
		/** Para hacer operaciones complejas con una imagen, crear un AffineTransform **/
		AffineTransform at = new AffineTransform();
		at.translate(getPosicionX(), getPosicionY()- imagen_Pauline.getHeight(null));
		/** Pintar a Donkey kong a buena escala, en vez de 50x50, se escala a otros valores de x e y, para hacerlo mas grande. **/
		at.scale(2.5, 2.1);   
		g2d.drawImage(imagen_Pauline,at,null);	

	}
	
	
	
	
	
	
	
	
	
	/** Funcion que se invoca cuando se gana el nivel 
	 * @param dk **/
	public void Rescatada(DonkeyKong dk) {
		rescatada = true;
		donkey = dk;
	}

	
	/** Runnable de Pauline **/
	@Override
	public void run() {
		try{
			while (true){
				if (isMuerta()){
					break;
				}
				/** En modo rescatada saca un corazon a mario **/
				if (rescatada){
					//raptada=true;
					imagen_Pauline = Pauline_amor;
					Thread.sleep(1200);
					donkey.PasarSiguienteNivel();
					break;
				}else{
					imagen_Pauline = Pauline_socorro;
					setPosicionX(getPosicionX()+5);
					Thread.sleep(400);
					setPosicionX(getPosicionX()-5);
					Thread.sleep(400);
				}
			}
		}catch (Exception e){
			e.printStackTrace();
		}
	}

	
	
	
	private boolean isMuerta() {
		return morir;
	}


	public int getPosicionX() {
		return posicion_x_Pauline;
	}

	public void setPosicionX(int posx) {
		posicion_x_Pauline = posx;
	}

	public int getPosicionY() {
		return posicion_y_Pauline;
	}
	
	public void setPosicionY(int posy) {
		posicion_y_Pauline = posy;
	}


	public boolean isRescatada() {
		return rescatada;
	}


	public void Raptada() {
		imagen_Pauline = Pauline_desamor;
	}


	public void Morir() {
		morir = true;		
	}
}
